<?php
//Config : Les informations personnels de l'instance (log, pass, etc)
require("../include/config.php");

//API Fonctions : les fonctions fournis de base par l'API
require("../API/php/fonctions.php");

//Header établie la connection à la base $connection
require("../API/php/header.php");

//Fonctions : Fonctions personnelles de l'instance
require("../php/fonctions.php");

//Mode debug
$modeDebug = false;

//Public ou privé (clé obligatoire)
$modePublic = true;

//Mode de sortie text,json,xml,csv
//pour xml et csv $object_retour->data["resultat"] doit contenir qu'un est unique array
$modeSortie = "json";

//Liens de test
// phpsql/getMetrics.php?milis=123450&ctrl=ok

//Définition des entrants
$arrayInput = array(
    "ctrl" => null
);

//Définition des entrants optionel
$arrayInputOpt = array(
    "option" => null
);

//Récupération des entrants
$arrayValeur = recupInput($arrayInput,$arrayInputOpt);

//Object retour minima
// $object_retour->strErreur string
// $object_retour->data  string
// $object_retour->statut  string

//--------------------------------------------------------------------------
$strSql = "SELECT ROUND((SUM(a.`velocite`)/count(*)),2) as 'velociteMoyenne'
    FROM (
        SELECT b.`week`, SUM(b.`work`) as 'velocite'
        FROM `ria`.`riawork` b
        WHERE 1=1
        AND b.`week` > (CONVERT(DATE_FORMAT(curdate() - INTERVAL 4 WEEK, '%Y%V'),UNSIGNED INTEGER) - 1)
        GROUP BY b.`week`
    ) a
";

// On indique que nous utiliserons les résultats en tant qu'objet
$select = $connection->query($strSql) or die('Erreur SQL !'.$strSql.'<br>'.print_r($connection->errorInfo(), true));
$select->setFetchMode(PDO::FETCH_OBJ);
$result = new stdClass();
$result->data = $select->fetchAll(PDO::FETCH_OBJ);

$velociteMoyenne = $result->data[0]->velociteMoyenne;

//--------------------------------------------------------------------------
$strSql = "UPDATE `".$prefixTable."tab_projets_metrics`
    SET `velocite` = ".$velociteMoyenne."
    WHERE 1=1
;";
$req = $connection->prepare($strSql);
$req->execute() or die('Erreur SQL:'.print_r($req->errorInfo(), true)." (".$strSql.")");
$req->closeCursor();

//--------------------------------------------------------------------------
$strSql = "UPDATE `tab_projets_metrics` a
    SET a.`valide` = (
        SELECT IFNULL(ROUND(SUM(c.`validatedWork`),2),0) as 'totalValide'
        FROM `ria`.`riaproject` b, `ria`.`riaplanningelement` c
        WHERE 1=1
        AND b.`id` = c.`idProject`
        AND b.`idStatus` <> 4
        AND c.`refType` = 'Project'
        AND IF((a.`id_projet` = 0),1,IF((a.`id_projet` = b.`id`), 1,0)) = 1
        AND b.`id` in (
            SELECT DISTINCT b.`idProject`
            FROM `ria`.`riawork` b
        )
    ),
    a.`consome` = (
        SELECT ROUND(SUM(d.`work`),2) as 'consomme'
        FROM `ria`.`riawork` d
        WHERE 1=1
        AND IF((a.`id_projet` = 0),1,IF((a.`id_projet` = d.`idProject`), 1,0)) = 1
        AND d.`idProject` in (
            SELECT DISTINCT e.`id`
            FROM `ria`.`riaproject` e
            WHERE 1=1
            AND e.`idStatus` <> 4
        )
        and d.`idProject` != 22/*demandes urgentes*/
    )
;";
$req = $connection->prepare($strSql);
$req->execute() or die('Erreur SQL:'.print_r($req->errorInfo(), true)." (".$strSql.")");
$req->closeCursor();

//--------------------------------------------------------------------------
$strSql = "SELECT a.`id`, a.`label`, a.`priorite`, a.`valide`,  
    ROUND((a.`valide` - a.`consome`),2) as 'reste', 
    ROUND((a.`velocite`*a.`priorite`/100),2) as 'velociteObj', 
    ROUND((a.`valide` - a.`consome`) / (a.`velocite`*a.`priorite`/100)) as 'nbSemaine',
    curdate() + INTERVAL ROUND((a.`valide` - a.`consome`) / (a.`velocite`*a.`priorite`/100)) WEEK as 'atterissage'
    FROM `".$prefixTable."tab_projets_metrics` a
    WHERE 1=1
";

// On envois la requète
$req = $connection->prepare($strSql);

if($req->execute()){
    // On indique que nous utiliserons les résultats en tant qu'objet
    $req->setFetchMode(PDO::FETCH_OBJ);

    // On transforme les résultats en tableaux d'objet
    $resultats = new stdClass();
    $resultats->data = $req->fetchAll(PDO::FETCH_OBJ);
    $resultats->nombre = count($resultats->data);

    $object_retour->data["metrics"] = $resultats;
}else{
    $error = 'Erreur SQL:'.print_r($req->errorInfo(), true)." (".$strSql.")";
    $object_retour->strErreur = $error;
}
$req->closeCursor();

//--------------------------------------------------------------------------
$strSql = "SELECT 100-SUM(a.`priorite`) as dispo  
    FROM `tab_projets_metrics` a
    WHERE 1=1
    AND a.`id_projet` != 0
";

// On envois la requète
$select = $connection->query($strSql) or die('Erreur SQL !'.$strSql.'<br>'.print_r($connection->errorInfo(), true));

// On indique que nous utiliserons les résultats en tant qu'objet
$select->setFetchMode(PDO::FETCH_OBJ);

// On transforme les résultats en tableaux d'objet
$pipe = new stdClass();
$pipe->data = $select->fetchAll(PDO::FETCH_OBJ);
$pipe->nombre = count($pipe->data);

$object_retour->data["pipe"] = $pipe;

//--------------------------------------------------------------------------
if($modeDebug){
    $strSorti .= ($strSql);
}

require("../API/php/footer.php");
?>